home *** CD-ROM | disk | FTP | other *** search
- /* ODE tests */
-
- /* Some of the tests are commented out. The majority of them fail
- due to some sort of testsuite interaction. They pass if these
- tests are run first, but then other tests fail */
-
- kill(all);
- done;
-
- /* Examples from "The Maxima Book" */
-
- ode2(x^2*'diff(y,x)+3*x*y=sin(x)/x, y, x);
- y = (%C-cos(x))/x^3;
- ic1(%, x=1, y=1);
- y = -(cos(x)-cos(1)-1)/x^3;
- method;
- linear;
-
- soln:ode2('diff(y,x,2) + y = 4*x, y, x);
- y = %K1*sin(x) + %K2*cos(x) + 4*x;
- method;
- variationofparameters;
- ic2(soln, x=0, y=1, diff(y,x)=3);
- y = -sin(x)+cos(x)+4*x;
- bc2(soln, x=0, y=3, x=2, y=1);
- y = -(3*cos(2)+7)*sin(x)/sin(2) + 3*cos(x) + 4*x;
-
- ode2((3*x^2+4*x+2)=(2*y-1)*'diff(y,x), y, x);
- y^2-y = x^3+2*x^2+2*x+%C;
- method;
- separable;
-
- /* Testsuite interaction causes this to fail */
- /* ode2(x^2*cos(x*y)*'diff(y,x) + (sin(x*y)+x*y*(cos(x*y)))=0, y, x);
- x*sin(x*y)=%C;
- method;
- exact; */
-
- ode2( (2*x*y-exp(-2*y))*'diff(y,x)+y=0, y, x);
- x*exp(2*y) - log(y) = %C;
- method;
- exact;
- intfactor;
- exp(2*y)/y;
-
- /* testsuite interaction causes this to fail */
- /* ode2( 'diff(y,x)=(y/x)^2+2*(y/x), y, x);
- -(x*y+x^2)/y = %C;
- method;
- exact; */
-
- ode2( 'diff(y,x)+(2/x)*y=(1/x^2)*y^3, y, x);
- y = 1/(sqrt( 2/(5*x^5) + %C)*x^2);
- method;
- bernoulli;
- odeindex;
- 3;
-
- ode2( 'diff(y,x,2)-3*'diff(y,x)+2*y=0, y, x);
- y = %K1*exp(2*x) + %K2*exp(x);
- method;
- constcoeff;
-
- ode2( 'diff(y,x,2)-4*'diff(y,x)+4*y=0, y, x);
- y = (%K2*x + %K1)*exp(2*x);
- method;
- constcoeff;
-
- ode2(x^2*'diff(y,x,2)+x*'diff(y,x)-y=0, y, x);
- y=%K2*x-%K1/(2*x);
- method;
- exact;
-
- ode2( x^2*'diff(y,x,2)+4*x*'diff(y,x)+2*y=0, y, x);
- y=%K1/x+%K2/x^2;
- method;
- exact; /*euler*/
-
- ode2( x^2*'diff(y,x,2)+5*x*'diff(y,x)+4*y=0, y, x);
- y=(%K2*log(x)+%K1)/x^2;
- method;
- euler;
-
- ode2( x^2*'diff(y,x,2)+x*'diff(y,x)+(x^2-1/4)*y=0, y, x);
- y=(%K1*sin(x)+%K2*cos(x))/sqrt(x);
- method;
- bessel;
-
- ode2( x^2*'diff(y,x,2)+x*'diff(y,x)+(x^2-4)*y=0, y, x);
- y=%K1*%J[2](x)+%K2*%Y[2](x);
- method;
- bessel;
-
- ode2( (x-1)^2*'diff(y,x,2)+(x-1)*'diff(y,x)+((x-1)^2-4)*y=0, y, x);
- y=%K1*%J[2](x-1)+%K2*%Y[2](x-1);
- method;
- bessel;
-
- /* ode2( 'diff(y,x,2)+2*'diff(y,x)+y=exp(x), y, x);
- y=exp(x)/4+(%K2*x+%K1)*exp(-x);
- method;
- variationofparameters;
- /* Particular solution */
- yp;
- exp(x)/4; */
-
- /* ode2( x*'diff(y,x,2)+('diff(y,x))^2=0, y, x);
- y='integrate(1/(log(x)+%K1),x)+%K2;
- method;
- freeofy; */
-
- /* ode2( y*'diff(y,x,2)+('diff(y,x))^2=0, y, x);
- y^2/(2*%K1)=x+%K2;
- method;
- freeofx; */
-
- eq: 'diff(y,x,2)+x*'diff(y,x)+exp(-x^2)*y=0;
- 'diff(y,x,2)+x*'diff(y,x,1)+%e^-x^2*y = 0;
- ans:ode2(eq,y,x);
- y = %k1*sin(sqrt(2)*sqrt(%pi)*erf(x/sqrt(2))/2)+%k2*cos(sqrt(2)*sqrt(%pi)*erf(x/sqrt(2))/2);
- is(ratsimp(ev(eq,ans,diff)));
- true;
- method;
- xformtoconstcoeff;
-
- eq:x*'diff(y,x,2)+(x^2-1)*'diff(y,x,1)+x^3*y=0;
- x*'diff(y,x,2)+(x^2-1)*'diff(y,x,1)+x^3*y=0;
- ans:ode2(eq,y,x);
- y=%e^-(x^2/4)*(%k1*sin(sqrt(3)*x^2/4)+%k2*cos(sqrt(3)*x^2/4));
- is(ratsimp(ev(eq,ans,diff)));
- true;
- method;
- xformtoconstcoeff;
-
- /* Tests of desolve */
-
- eqn1:'diff(f(x),x) = sin(x)+'diff(g(x),x);
- 'diff(f(x),x,1) = 'diff(g(x),x,1)+sin(x);
- eqn2:'diff(g(x),x,2) = 'diff(f(x),x)-cos(x);
- 'diff(g(x),x,2) = 'diff(f(x),x,1)-cos(x);
- desolve([eqn1,eqn2],[f(x),g(x)]);
- [f(x)=%e^x*(at('diff(g(x),x,1),x = 0))-at('diff(g(x),x,1),x = 0)+f(0),g(x)=%e^x*(at('diff(g(x),x,1),x=0))-at('diff(g(x),x,1),x = 0)+cos(x)+g(0)-1];
- atvalue('diff(g(x),x),x = 0,a);
- a;
- atvalue(f(x),x = 0,1);
- 1;
- desolve([eqn1,eqn2],[f(x),g(x)]);
- [f(x) = a*%e^x-a+1,g(x) = cos(x)+a*%e^x-a+g(0)-1];
- remove(f,atvalue,g,atvalue);
- done;
-
- atvalue('diff(g(x),x),x = 0,a);
- a;
- atvalue(f(x),x = 0,1);
- 1;
- desolve([eqn1,eqn2],[f(x),g(x)]);
- [f(x) = a*%e^x-a+1,g(x) = cos(x)+a*%e^x-a+g(0)-1];
-
- /* eqn3: 'diff(f(x),x,2)+f(x)=2*x;
- 'diff(f(x),x,2)+f(x)=2*x;
- desolve(eqn3,f(x));
- f(x) = sin(x)*(at('diff(f(x),x,1),x = 0)-2)+f(0)*cos(x)+2*x; */
-
-
- /* Tests from:
- F Postel and P Zimmermann, A Review of the ODE solvers of
- AXIOM, DERIVE, MACSYMA, MATHEMATICA, MUPAD and REDUCE
- Procedings of the 5th Rhine Workshop on Computer Algebra
- April 1-3, 1996, Saint-Louis, France
- http://www.loria.fr/~zimmerma/ComputerAlgebra/
- */
-
- /* Equation 1 - Linear polynomial */
- eqn: (x^4-x^3)*diff(u(x),x) + 2*x^4*u(x) = x^3/3 + C;
- (x^4-x^3)*'DIFF(u(x),x,1)+2*x^4*u(x) = x^3/3+C;
- ans:ode2(eqn,u(x),x);
- u(x) = ((2*x^3-3*x^2+6*C)*%E^(2*x)/(12*x^2)+%C)*%E^-(2*(LOG(x-1)+x));
- factor(ans);
- u(x)=%E^-(2*x)*(2*x^3*%E^(2*x)-3*x^2*%E^(2*x)+6*C*%E^(2*x)+12*%C*x^2)/(12*(x-1)^2*x^2);
- is(ratsimp(ev(eqn,ans,diff)));
- TRUE;
-
- /* Equation (2) {firstord2} */
- eqn: -1/2*'diff(y,x) + y = sin(x);
- y-'diff(y,x,1)/2 = sin(x);
- ans: ode2(eqn,y,x);
- y = %e^(2*x)*(%c-2*%e^-(2*x)*(-2*sin(x)-cos(x))/5);
- ans: expand(ans);
- y = 4*sin(x)/5+2*cos(x)/5+%c*%e^(2*x);
- is(ratsimp(ev(eqn,ans,diff)));
- true;
-
- /* Equation 3 - Linear Change of variables */
- eqn: 'diff(y,x,2)*(a*x+b)^2+4*'diff(y,x)*(a*x+b)*a+2*y*a^2=0;
- (a*x+b)^2*'diff(y,x,2)+4*a*(a*x+b)*'diff(y,x,1)+2*a^2*y = 0;
- ans:ode2(eqn,y,x);
- y = %k1*x/(a*x+b)^2+%k2/(a*x+b)^2;
- is(ratsimp(ev(eqn,%,diff)));
- true;
-
- /* Equation 4 - Linear polynomial (Adjoint equation)
- See Zwillinger, p151
- This crashed maxima-5.5
- */
- eqn: (x^2-x)*'diff(y,x,2)+(2*x^2+4*x-3)*'diff(y,x)+8*x*y=1;
- (x^2-x)*'diff(y,x,2)+(2*x^2+4*x-3)*'diff(y,x,1)+8*x*y = 1;
- ans:ode2(eqn,y,x);
- false;
-
- /* Equation 5 - Linear polynomial */
- eqn: (x^2-x)*'diff(y,x,2)+(1-2*x^2)*'diff(y,x)+(4*x-2)*y=0;
- (x^2-x)*'DIFF(y,x,2)+(1-2*x^2)*'DIFF(y,x,1)+(4*x-2)*y = 0;
- ans:ode2(eqn,y,x);
- false;
-
- /* Equation 6 - Dependent variable missing */
- /* Another testsuite interaction problem */
- /* eqn:'diff(y,x,2)+2*x*'diff(y,x)=2*x;
- 'diff(y,x,2)+2*x*'diff(y,x,1) = 2*x;
- ans: ode2(eqn,y,x);
- y = sqrt(%pi)*%k1*erf(x)/2+x+%k2;
- is(ratsimp(ev(eqn,ans,diff)));
- true; */
-
- /* Equation 7 - Liouvillian solution */
- eqn: (x^3/2-x^2)*'diff(y,x,2)+(s2*x^2-3*x+1)*'diff(y,x)+(x-1)*y=0;
- (x^3/2-x^2)*'diff(y,x,2)+(s2*x^2-3*x+1)*'diff(y,x,1)+(x-1)*y = 0;
- ode2(eqn,y,x);
- false;
-
- /* Equation 8 - Reduction of order */
- eqn: 'diff(y,x,2)-2*x*'diff(y,x)+2*y=3;
- 'diff(y,x,2)-2*x*'diff(y,x)+2*y = 3;
- ode2(eqn,y,x);
- false;
-
- /* Equation 9 - Integrating factors */
- eqn: sqrt(x)*'diff(y,x,2)+2*x*'diff(y,x)+3*y=0;
- sqrt(x)*'diff(y,x,2)+2*x*'diff(y,x)+3*y=0;
- ode2(eqn,y,x);
- false;
-
- /* Equation 18 - Bernoulli equation */
- eqn: 'diff(y,x) + y = y^3*sin(x);
- 'DIFF(y,x,1)+y = SIN(x)*y^3;
- ans: ode2(eqn,y,x);
- y = %E^-x/SQRT(%C-2*%E^-(2*x)*(-2*SIN(x)-COS(x))/5);
- is(ratsimp(ev(eqn,ans,diff)));
- true;
-
- /* Equation (20) {Clairaut} */
- eqn: (x^2-1)*'diff(y,x)^2 - 2*x*y*'diff(y,x) + y^2 -1 = 0;
- (x^2-1)*'diff(y,x)^2 - 2*x*y*'diff(y,x) + y^2 -1 = 0;
- ode2(eqn,y,x);
- false;
-